package com.seeyon.apps.brwh.kit;

import com.seeyon.ctp.common.SystemEnvironment;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class ErrorKit {


    /**
     * 向指定日志文件中添加日志信息。
     *
     * @param log       需要记录的日志信息。
     * @param className 产生日志的类名，用于标识日志来源。
     * @throws Exception 如果在日志记录过程中出现错误，则抛出异常。
     */
    public static void addLog(String log, String className) throws Exception {
        // 获取一个指定类的日志记录器
        Logger customLog = Logger.getLogger(className);

        // 获取系统应用文件夹路径，并处理为标准的文件路径格式
        String systemUrl = SystemEnvironment.getApplicationFolder().replace("webapps\\seeyon", "").replaceAll("\\\\", "/");

        // 构造日志文件的存储路径，包括日期目录
        String pathUrl = systemUrl + "logs_sy/customLog/" + new SimpleDateFormat("yyyy-MM-dd").format(new Date());

        // 创建日志文件所在的文件夹，如果不存在的话
        File filePath = new File(pathUrl);
        if (!filePath.exists()) {
            createFolder(pathUrl);
        }

        // 初始化文件处理器，并将其添加到日志记录器中
        FileHandler fileHandler;
        fileHandler = new FileHandler(pathUrl + "/customLog.log", true);
        customLog.addHandler(fileHandler);

        // 设置文件处理器的格式化器
        SimpleFormatter formatter = new SimpleFormatter();
        fileHandler.setFormatter(formatter);

        // 记录日志信息
        customLog.info(log);
    }

    /**
     * 创建指定路径的文件夹。
     * 如果文件夹不存在，则尝试创建该文件夹，并返回创建后的文件对象。
     * 如果文件夹已存在，则直接返回该文件对象。
     *
     * @param path 指定的文件夹路径。
     * @return 返回创建或已存在的文件夹对象，如果创建失败则返回null。
     */
    private static File createFolder(String path) {
        File ret = null; // 准备返回的文件对象
        File file = new File(path); // 根据路径创建File对象
        if (!file.exists()) { // 如果文件夹不存在
            if (file.mkdirs()) { // 尝试创建文件夹，并判断是否成功
                ret = file; // 创建成功，设置返回值
            }
        } else { // 如果文件夹已存在
            ret = file; // 直接设置返回值为文件对象
        }
        return ret; // 返回文件夹对象或null
    }
}
